package com.lazily.static_;


/**
 * @Author:  GZQ
 * @date:  2025/1/12 22:26
 * @description: 类方法的注意事项与细节
 */

public class StaticMethodDetail {
    public static void main(String[] args) {

        D.hi(); // ok
        // 非静态方法, 不能通过类名调用
        // D.say(); // false, 需要先创建对象, 再调用
    }
}

class D {

    // 非静态变量
    private int n1 = 100;
    // 静态变量
    private static int n2 = 200;

    public void say() { // 非静态方法

    }

    public static void hi() { // 静态方法

        // 类方法中,  不允许使用和对象有关的关键字,
        // 比如this, super。普通方法(成员方法)可以。
        // System.out.println(this.n1);
    }

    // 类方法(静态方法)中, 只能访问 静态变量 或 静态方法
    // 口诀：静态方法只能访问静态成员。
    public static void hello() {
        System.out.println(n2);
        System.out.println(D.n2);
        // System.out.println(this.n2); // 不能使用
        hi(); // ok
        // say(); // 不允许
    }

    // 普通成员方法, 既可以访问 非静态成员, 也可以访问静态成员。
    // 小结： 非静态方法可以访问 静态成员和非静态成员
    public void ok() {
        // 非静态成员
        System.out.println(n1);
        say();
        // 静态成员
        System.out.println(n2);
        hello();
        hi();
    }
}
